package com.hsyt.pfc.redis;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.Collection;
import java.util.Set;
import java.util.concurrent.TimeUnit;

/**
 * @Description: redis key 相关 操作接口
 * @ClassName: RedisKeyHandler
 * @Package: com.hsyt.pfc.redis
 * @Author: wangze@hsyuntai.com
 * @Date: 2018/8/10 11:43
 * @Copyright: 版权归 HSYUNTAI 所有
 */
@Component
public class RedisKeyHandler {

	@Autowired
	private StringRedisTemplate redisTemplate;

	private static StringRedisTemplate stringRedisTemplate;

	@PostConstruct
	private void init() {
		stringRedisTemplate = this.redisTemplate;
	}

	public StringRedisTemplate getRedisTemplate() {
		return redisTemplate;
	}

	public void setRedisTemplate(StringRedisTemplate redisTemplate) {
		this.redisTemplate = redisTemplate;
	}

	/**
	 * @Description: Key（键）:  删除给定的一个 key 。
	 * @param key
	* @Author: wangze@hsyuntai.com
	 * @Date: 2015年11月13日 下午1:59:57
	 */
	public static void kDel(final String key){
		stringRedisTemplate.delete(key);
	}
	
	/**
	 * @Description: Key（键）:  删除给定的多个key 
	 * @param keys
	* @Author: wangze@hsyuntai.com
	 * @Date: 2015年11月13日 下午2:00:52
	 */
	public static void kDel(final Collection<String> keys){
		stringRedisTemplate.delete(keys);
	}
	
	/**
	 * @Description: Key（键）: 为给定 key 设置生存时间，当 key 过期时(生存时间为 0 )，它会被自动删除。
	 * 							对一个已经带有生存时间的 key 执行 EXPIRE 命令，新指定的生存时间会取代旧的生存时间。
	 * @param key
	 * @param seconds
	* @Author: wangze@hsyuntai.com
	 * @Date: 2015年11月13日 下午2:04:10
	 */
	public static boolean KExpire(final String key,int seconds){
		return stringRedisTemplate.expire(key, seconds, TimeUnit.SECONDS);
	}
	
	/**
	 * @Description: Key（键）: 检查给定 key 是否存在。
	 * 							若 key 存在，返回 1 ，否则返回 0 。
	 * @param key
	 * @return
	* @Author: wangze@hsyuntai.com
	 * @Date: 2015年11月13日 下午2:17:31
	 */
	public static boolean kExists(final String key){
		return stringRedisTemplate.hasKey(key);
	}
	
	/**
	 * @Description: Key（键）: 查找所有符合给定模式 pattern 的 key 。
	 * 						    ！禁止使用*符号直接匹配！
	 * 						  KEYS h?llo 匹配 hello ， hallo 和 hxllo 等。
	 * 						  KEYS h*llo 匹配 hllo 和 heeeeello 等。
	 * 						  KEYS h[ae]llo 匹配 hello 和 hallo ，但不匹配 hillo 。
	 * 						    特殊符号用 \ 隔开
	 * @param pattern
	 * @return
	* @Author: wangze@hsyuntai.com
	 * @Date: 2015年11月13日 下午2:19:06
	 */
	public static Set<String> kKeys(final String pattern){
		if(pattern == null || pattern.equals("") || pattern.equals("*"))
			return null;
		return stringRedisTemplate.keys(pattern);
	}

}
